NFS(Network File System)はネットワーク上の他のホストとファイル資源を共有するために利用されます。クライアントはリモートマシンのディスクパーティションをマウントして、自分のローカルファイルであるかのように参照できるようになります。Linux システムはクライアントとしてもサーバーとしても設定でき、また両方同時に機能させることもできます。 NFS を機能させるためには、portmap というデーモンプログラムを起動しておかなければなりません。
まず、NFSサーバーとして動作させるためには、以下のパッケージが必要となりますので予めインストールされているかどうか確認して置いてください。
$ rpm -q portmap nfs-utils |
システム再起動時に、自動的に起動するように設定します。
# chkconfig portmap
on # chkconfig nfslock on # chkconfig nfs on |
上記3つのサービスは起動する順番があり、portmap → nfslock → nfs の順に起動するようになっている必要があります。以下コマンドを入力して確認しておきましょう。
# ls /etc/rc.d/rc3.d/*{portmap,nfs*} /etc/rc.d/rc3.d/S13portmap /etc/rc.d/rc3.d/S14nfslock /etc/rc.d/rc3.d/S60nfs |
※最近は、portmap の代わりに rpcbind になっています。
上記の順番どおりに起動します。
# /etc/init.d/portmap
start Starting portmapper: [ OK ] # /etc/init.d/nfslock start Starting NFS statd: [ OK ] # /etc/init.d/nfs start Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ] |
プロセスが正しく起動されたかどうかを確認するには、rpcinfo コマンドを使用します。以下のように、rquotad、nfs、nlockmgr、mountd
が表示されればOKです。
# rpcinfo -p localhost program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 32771 status 100024 1 tcp 35865 status 100011 1 udp 715 rquotad 100011 2 udp 715 rquotad 100011 1 tcp 718 rquotad 100011 2 tcp 718 rquotad 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100021 1 udp 32772 nlockmgr 100021 3 udp 32772 nlockmgr 100021 4 udp 32772 nlockmgr 100021 1 tcp 35866 nlockmgr 100021 3 tcp 35866 nlockmgr 100021 4 tcp 35866 nlockmgr 100005 1 udp 734 mountd 100005 1 tcp 737 mountd 100005 2 udp 734 mountd 100005 2 tcp 737 mountd 100005 3 udp 734 mountd 100005 3 tcp 737 mountd |
portmap は、NFSサーバーにアクセスする際に、libwrap.so を使用しているため、/etc/hosts.allow、/etc/hosts.deny
を用いて、TCP Wrapperの機能を使用する事ができるようになります。LAN 内のみからのアクセスを許可する場合には、以下のように設定しておきます。
# vi /etc/hosts.allow |
portmap : 172.16.50.0/255.255.255.224 //ホストを指定する場合は、 portmap : 172.16.51.2 , 172.16.51.3 |
/etc/hosts.deny をに単に「ALL:ALL 」と記述する方法もありますが、この場合、明示的に許可されたホスト以外は全てのサービスを拒否する事になってしまうので、新規ソフトウェアをインストールした場合などにトラブルの元となるので、NFS
関連のデーモンをひとつづつ追加しておいた方が無難です。
# vi /etc/hosts.deny |
portmap:ALL lockd:ALL mountd:ALL rquotad:ALL statd:ALL |
/etc/exports は、どのマシンに、どのディレクトリを、どのような権限でアクセス許可するかを設定するファイルです。書式は以下の通りです。
|
実際には以下のようになります。以下は、「/home/data ディレクトリを172.16.50.0/27
のネットワークに読み取りを許可する」という意味になります。
# vi /etc/exports |
/home/data 172.16.50.0/255.255.255.224 ro |
なお、使用できる権限オプションを以下に記すので参考にしてください。
ro | 読み取りのみ許可する |
rw | 読み取りと書き込みを許可する |
noaccess | エクスポートしたディレクトリ以下のディレクトリにアクセスできないようにする。このオプションでは、単独では意味がないので、通常は他のエントリと組み合わせて使用します。 |
link_relative | 絶対パスで指定されているシンボリックリンクを相対パス指定に変換する。通常はあまり使用するべきではありません。 |
root_squash | エクスポートされたディレクトリに対して、root 権限ではアクセスできないようにする。 |
no_root_squash | エクスポートされたディレクトリに対して、root 権限でアクセスできるようにする。 |
squash_uids=n-m | UIDがn から m のユーザーは、エクスポートされたディレクトリに対してそのままのUID
ではなく、nobody ユーザーとしてしかアクセスできないようにする。 |
all_squash | root を含めて全てのユーザーがnobody ユーザーにマッピングされる |
以下に、簡単に設定例をあげてみます。以下、1行目では、/usr/local/src を click-rescue.com
ドメインのユーザーにのみ読み取りだけを許可し、0から499 までのユーザーに対しては、nobodyユーザーとしてアクセスさせています。3行目は、/export/home
ディレクトリを自ネットワークのマシンのみに読み書きを許可し、0から499 までのユーザーに対しては、nobodyユーザーとしてアクセスさせる設定になっています。
# vi /etc/exports |
/usr/local/src *.click-rescue.com(ro,squach_uids=0-499) |
# mkdir -p /export/home/admin /export/home 172.16.50.0/255.255.255.224(rw,squach_uids=0-499) |
/etc/exports ファイルを編集しなおした場合、exportfs コマンドを使用して、設定の変更を反映させます。このコマンドを実行しない限り設定は反映されないので注意してください。
# exportfs -ra |
設定を確認するには、showmount コマンドを使用します。
# showmount -e Export list for ns1.click-rescue.com: /usr/local/src *.click-rescue.com /export/home 172.16.50.0/255.255.255.224 |
-a | 全てのマウントポイントを表示する |
-d | 共有しているディレクトリ名のみ表示する |
-e | ディレクトリを共有可能な相手を表示する |
クライアントマシンからマウントを実行するには、mount コマンドに-t オプションを付加し、nfs
を指定します。ns1:/home/sakura は、「NFSサーバー名:エクスポートするディレクトリ」を指定します。マウントオプションを指定するには、-o
オプションをつけてマウントオプションを指定します。
$ mount -t nfs -o rw ns1:/home/sakura /mnt/nfs |
nolock | NFSロックを無効化(ロックをサポートしていない古いNFS用) |
bg | 最初のNFSマウントがタイムアウトになった場合、バックグラウンドでマウントを継続する |
fg | 最初のNFSマウントがタイムアウトになった場合、フォアグラウンドでマウントを継続 |
soft | ソフトマウントを実行 |
hard | ハードマウントを実行 |
retry | NFSマウントの試行を中止するまでの時間を分単位で指定する。 |
intr | ハードマウント時に割り込みを受け付ける |
rsize | 読み取りのバッファサイズをバイト単位で指定する |
wsize | 書き込みのバッファサイズをバイト単位で指定する |
マウントできない場合の主な対処方法について簡単に記しておくので参考にしてください。
NFSにおいては、クライアント上でのUID及びGIDがサーバー上でも利用されるため、クライアントとサーバ間でUID及びGIDの同期が取れていなければ、NFSサーバ上では別のユーザーとなってしまう可能性があります。なので、クライアントとサーバでは同じUID及びGID
を使うようにしましょう。なお、NIS(Network Infomation System)を使用すると、このようなユーザー情報を統合的に扱う事ができるようになります。
/etc/exports を編集した場合は、必ず、exportfs -ra コマンドを実行して変更を反映させてあげる必要があります。
# cat /proc/fs/nfs/exports /home/sakura ns2.click-rescue.com(rw,root_squash,sync,wdelay) # 172.16.50.3 |
www.it-shikaku.jp
[Top] | |
[講義目次] | |
[2.10:電子メールサービス] | |
[2.11:ファイル共有サービス] | |
[2.11.1 Sambaの設定と管理] | |
[2.11.2 NFSサーバーの設定と管理] | |
[2.12:システムのセキュリティ] | |
[講義検索] | |
[リンク集] |